//
//  HMOauthViewController.swift
//  WeiBo
//
//  Created by apple on 16/6/24.
//  Copyright © 2016年 itheima. All rights reserved.
//

import UIKit

class HMOauthViewController: UIViewController {

    // 定义一个属性
    let webView: UIWebView = UIWebView()
    
    override func loadView() {
        
        // web页面填充满这个视图
        view = webView
        
    
    }
    
    
    override func viewDidLoad() {
        super.viewDidLoad()

        // Do any additional setup after loading the view.
        
        // 接下来让webView加载授权页面
        //MARK:-- Oauth 认证的第一步做完了
        let urlString = "https://api.weibo.com/oauth2/authorize?client_id=\(AppKey)&redirect_uri=\(AppRedirectURL)"
        // 创建url
        let url = NSURL(string: urlString)!
        //  让webView请求url -- 把一个可选项添加到 非可选项的时候,需要解包
        webView.loadRequest(NSURLRequest(URL: url))
        
        setupNav()
        
        //设置webView的代理,去查看代理方法
        webView.delegate = self
        
    }


}

// MARK:-- 设置导航栏
extension HMOauthViewController{
    
    private func setupNav(){
        
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "返回", style: UIBarButtonItemStyle.Plain, target: self, action: "dismiss")
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "自动填充", style: UIBarButtonItemStyle.Plain, target: self, action: "auto")
        
        
    }
    
   @objc private func dismiss(){
        
        dismissViewControllerAnimated(false) { () -> Void in
            
        }
        
    }
    
    // 自动填充
   @objc private func auto(){
        
        // 1. 我们会频繁的输入用户名和密码
        // 2. 自动填充会设置到 js与 webView的交互
    
    // 针对 "  转化有2种方式 第一种是转义 第二种 " -> '
        let js = "document.getElementById('userId').value = 'itcast123456@hotmail.com';document.getElementById('passwd').value = 'itcast123456'"
    
        webView.stringByEvaluatingJavaScriptFromString(js)
    }
    
}

// MARK:-- 第二步就是获取code
extension HMOauthViewController: UIWebViewDelegate{
    
    // 如果大家第一次接触这个方法,可以随便返回一个返回值
    // 网络加载的时候,都会调用一下这个方法,返回true,则运行webView加载页面
    // 返回false,则不允许加载页面
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        printLog(request.URL)
        
        // 这个才是我们想要的
        // 我们可以通过肉眼看到回调页面说明我们的url已经有code
        
        if let urlString = request.URL?.absoluteString{
            
            // urlString 如果是可选的 , urlString?.hasPrefix(AppRedirectURL) 有可能 = nil
            // 我们不拿 nil 作为 if的判断
            // 把 可选的urlString转换成非可选
            if urlString.hasPrefix(AppRedirectURL) {
                printLog("这个网址有code")
                printLog(urlString)
                // http://www.itheima.com/?code=b9cd51c68f60a834c4d698a0036cc96b
                
                // 如何获取code= 后边的一堆字符串
                // 至少有 2种解决方法
                // 方法一: 根据 = 去截取
                // 方法二: 
                
                //  For example, in the URL http://www.example.com/index.php?key1=value1&key2=value2, the query string is key1=value1&key2=value2
                if let query = request.URL?.query {
                    /*
                        String 与 NSString 可以相互转换
                    */
                    let startIndex = "code=".endIndex
                    let code = query.substringFromIndex(startIndex)
                    
                    printLog(code)
                    
                    // 调用获取token的方法
//                    loadToken(code)
                    
                    // 为什么要这么做
                    /*
                        1. 针对于成功的处理以及失败的处理,只集中在一处
                        2. 方法由谁创建,就由谁负责到底
                    */
                    let webSuccess = {
                    
                        printLog("回调成功")
                        // 让页面消失
                        self.dismiss()
                        // 视图控制器切换,去跳转到欢迎界面
                        NSNotificationCenter.defaultCenter().postNotificationName(kNotificationChangeRootViewController, object: self)
                        
                    }
                    
                    let webFailed = {
                        printLog("请求数据失败")
                    }
                    
                    
                    
                    HMOauthViewModel.shareInstance.loadToken(code, success: webSuccess, failed: webFailed)
                    
                    // 我们不想让 回调页面出来,我们返回一个false
                    return false
                    
                }
                
                
                
            }
            
        }
        
        
        
        return true
        
    }
    
}

//MARK:-- 第三步用code来交换获取Token


//MARK:-- 我们可以通过Token 来获取一下用户的信息

